/*
@data: 2023/8/7
@author: North
@desc: test
学生信息管理系统  id 、name、age、address  （id不能重复）

1、添加学生信息
2、修改学生信息
3、删除学生信息
4、查看当前所有学生信息
5、退出
*/
package main

import (
"fmt"
)

// 定义学生信息结构体
type Student struct {
	ID      int
	Name    string
	Age     int
	Address string
}

// 学生信息管理系统
type StudentManager struct {
	students map[int]Student
}

// 添加学生信息
func (sm *StudentManager) AddStudent(student Student) {
	_, exists := sm.students[student.ID]
	if exists {
		fmt.Println("Error: 学生ID已存在，无法添加。")
	} else {
		sm.students[student.ID] = student
		fmt.Println("学生信息添加成功。")
	}
}

// 修改学生信息
func (sm *StudentManager) ModifyStudent(student Student) {
	_, exists := sm.students[student.ID]
	if exists {
		sm.students[student.ID] = student
		fmt.Println("学生信息修改成功。")
	} else {
		fmt.Println("Error: 学生ID不存在，无法修改。")
	}
}

// 删除学生信息
func (sm *StudentManager) DeleteStudent(id int) {
	_, exists := sm.students[id]
	if exists {
		delete(sm.students, id)
		fmt.Println("学生信息删除成功。")
	} else {
		fmt.Println("Error: 学生ID不存在，无法删除。")
	}
}

// 查看所有学生信息
func (sm *StudentManager) ViewAllStudents() {
	fmt.Println("当前所有学生信息：")
	for _, student := range sm.students {
		fmt.Printf("ID: %d, Name: %s, Age: %d, Address: %s\n", student.ID, student.Name, student.Age, student.Address)
	}
}

func main() {
	studentManager := StudentManager{
		students: make(map[int]Student),
	}

	for {
		fmt.Println("学生信息管理系统")
		fmt.Println("1、添加学生信息")
		fmt.Println("2、修改学生信息")
		fmt.Println("3、删除学生信息")
		fmt.Println("4、查看当前所有学生信息")
		fmt.Println("5、退出")
		fmt.Print("请选择操作：")

		var choice int
		fmt.Scanln(&choice)

		switch choice {
		case 1:
			var student Student
			fmt.Print("请输入学生ID：")
			fmt.Scanln(&student.ID)
			fmt.Print("请输入学生姓名：")
			fmt.Scanln(&student.Name)
			fmt.Print("请输入学生年龄：")
			fmt.Scanln(&student.Age)
			fmt.Print("请输入学生地址：")
			fmt.Scanln(&student.Address)

			studentManager.AddStudent(student)

		case 2:
			var student Student
			fmt.Print("请输入学生ID：")
			fmt.Scanln(&student.ID)
			fmt.Print("请输入学生姓名：")
			fmt.Scanln(&student.Name)
			fmt.Print("请输入学生年龄：")
			fmt.Scanln(&student.Age)
			fmt.Print("请输入学生地址：")
			fmt.Scanln(&student.Address)

			studentManager.ModifyStudent(student)

		case 3:
			var id int
			fmt.Print("请输入要删除学生的ID：")
			fmt.Scanln(&id)

			studentManager.DeleteStudent(id)

		case 4:
			studentManager.ViewAllStudents()

		case 5:
			fmt.Println("退出学生信息管理系统。")
			return

		default:
			fmt.Println("无效的选择。")
		}
	}
}
